import click
from app import create_app
from flask.cli import with_appcontext
from app.exts import db
from app.models import TodoModel # 导入模型 [为了进行数据迁移]
from app.models import User
import random

app = create_app()

@click.group()
def cli():
    """Flask应用管理命令行工具"""
    pass

@cli.command()
def run():
    """运行Flask开发服务器"""
    app.run(debug=True)

@cli.command()
@with_appcontext
def dbinit():    # 创建数据库表（如果不存在）
    db.create_all()  # 方式1：加上with_appcontext修饰器
    click.echo("数据库表已创建！")
@cli.command()    
@with_appcontext
def deltable():
    """根据数据库模型删除指定的数据库表"""
    table_name = 'users'
    if table_name in db.metadata.tables:
        db.metadata.tables[table_name].drop(db.engine)
        click.echo(f"表 {table_name} 删除成功！")
    else:
        click.echo(f"表 {table_name} 不存在！")  

@cli.command()
@with_appcontext
def addtodo():
    """添加待办事项"""
    todo = TodoModel(title=f"定位精度和速度已经卫星数量{random.randint(1, 100)}")
    db.session.add(todo)
    db.session.commit()
    click.echo("待办事项添加成功！")


@cli.command()
@with_appcontext
def gettodo():
    """添加待办事项"""
    todopages = TodoModel.query.paginate(page=1,per_page=20) # 分⻚查询, 每⻚3个, 查询第2⻚的数据
    for page in todopages:
        print(page.id, page.title, page.posted_on,page.status)
    click.echo("按照页来查询待办事项添加成功！")
            
@cli.command()
@with_appcontext
def dropdb():
    """删除所有数据库表"""
    db.drop_all()

@cli.command()
@with_appcontext
def createsuperuser():
    """创建超级用户"""
    username = click.prompt("请输入用户名")
    password = click.prompt("请输入密码")
    # user = User(username=username, password=password)
    # db.session.add(user)
    # db.session.commit()
    # click.echo(f"超级用户 {username} 创建成功！")
    
if __name__ == '__main__':
    cli()
    
